package com.mall.system.feign;

import com.mall.common.result.Result;
import com.mall.common.entity.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * 用户服务Feign客户端
 */
@FeignClient(contextId = "userServiceFeignClient", name = "mall-system", path = "/system/users", fallback = UserServiceFeignClientFallback.class)
public interface UserServiceFeignClient {
    
    /**
     * 根据用户名获取用户
     * 
     * @param username 用户名
     * @return 用户信息
     */
    @GetMapping("/{username}")
    Result<User> getUserByUsername(@PathVariable("username") String username);
    
    /**
     * 根据手机号获取用户
     * 
     * @param mobile 手机号
     * @return 用户信息
     */
    @GetMapping("/mobile/{mobile}")
    Result<User> getUserByMobile(@PathVariable("mobile") String mobile);
    
    /**
     * 根据邮箱获取用户
     * 
     * @param email 邮箱
     * @return 用户信息
     */
    @GetMapping("/email/{email}")
    Result<User> getUserByEmail(@PathVariable("email") String email);
    
    /**
     * 用户注册
     * 
     * @param user 用户信息
     * @return 是否成功
     */
    @PostMapping("/register")
    Result<Boolean> register(@RequestBody User user);
    
    /**
     * 创建用户（用于第三方登录自动创建用户）
     * 
     * @param user 用户信息
     * @return 创建的用户信息
     */
    @PostMapping
    Result<User> createUser(@RequestBody User user);
    
    /**
     * 根据第三方平台唯一ID获取用户
     * 
     * @param uniqueId 第三方平台唯一ID
     * @return 用户信息
     */
    @GetMapping("/thirdParty/{uniqueId}")
    Result<User> getUserByUniqueId(@PathVariable("uniqueId") String uniqueId);
    
    /**
     * 更新用户信息
     * 
     * @param user 用户信息
     * @return 是否成功
     */
    @PutMapping
    Result<Boolean> updateUser(@RequestBody User user);
    
    /**
     * 根据用户ID获取用户
     * 
     * @param userId 用户ID
     * @return 用户信息
     */
    @GetMapping("/id/{userId}")
    Result<User> getUserById(@PathVariable("userId") Long userId);
}